package cn.tedu.weibo2.controller;

import cn.tedu.weibo2.response.JsonResult;
import cn.tedu.weibo2.service.WeiboService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping("/v1/")
public class UploadController {
    @Value("${file-path}")
    private String filePath;

    @PostMapping("upload")//MultipartFile的参数名与前端传递参数名一致,不然找不到
    public JsonResult upload(MultipartFile file) throws IOException {
        log.debug("filepath:{}",filePath);
        String originalFilename = file.getOriginalFilename();
        log.debug("原始文件名:{}",originalFilename);
        String suffix= originalFilename.substring(originalFilename.lastIndexOf("."));
        //生成唯一文件名
        String newFilename = UUID.randomUUID()+suffix;
        log.debug("新文件名:{}",newFilename);
        //图片保存到本地外层目录
        String dirPath=filePath;
        //格式化日期,生成目录
        SimpleDateFormat dateFormat=new SimpleDateFormat("/yyyy/MM/dd/");
        String datePath=dateFormat.format(new Date());
        //当前完整目录
        File dir=new File(dirPath+datePath);
        if (!dir.exists()){
            dir.mkdirs();
        }
        //最终的保存地址
        String finalPath=dirPath+datePath+newFilename;
        //存储图片到本地
        file.transferTo(new File(finalPath));
        return JsonResult.ok(datePath+newFilename);
    }

    @DeleteMapping("remove")
    public JsonResult remove(String imgUrl){
        //由于用户点击上传图片时,本地就已经缓存了图片,如果用户此时取消发布,数据库并没有保存,但是本地已经存在图片,所以要清除缓存的图片
        log.debug("要删除的图片地址:{}",imgUrl);
        new File(filePath+imgUrl).delete();
        return JsonResult.ok();
    }
}
